;(() => {
  /* 
interface和type的区别
1-1相同点
1-2都可以描述一个对象或者函数
不同点
2-1 type 声明基本类型别名、联合类型、元祖等
2-2 typeof获取实例的对象
2-3 interface可以被合并
*/

  // interface IPriceData {
  //   id: number
  //   m: string
  // }
  // type IPriceDataArray = IPriceData[]

  // function getPriceData() {
  //   return new Promise<IPriceDataArray>((reslove, reject) => {
  //     fetch('url')
  //       .then(function (response) {
  //         return response.json()
  //       })
  //       .then(function (myJson) {
  //         const data: IPriceDataArray = []
  //         reslove(data)
  //       })
  //   })
  // }
  // getPriceData().then(data => {
  //   console.log(data[0].id)
  // })

  interface ClockConstructor {
    new (hour: number, minute: number): ClockInterface
  }
  interface ClockInterface {
    tick(): void
  }

  class DigitalClock implements ClockInterface {
    public tick(): void {
      console.log('111111')
    }
  }
  class AnalogClock implements ClockInterface {
    public tick(): void {
      console.log('2222222')
    }
  }

  function createClock(
    ctor: ClockConstructor,
    hour: number,
    minute: number
  ): ClockInterface {
    return new ctor(hour, minute)
  }

  const digital = createClock(DigitalClock, 12, 17)
  console.log(digital)

  digital.tick()
})()

// 呵呵呵呵
